
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Papelera;

import Profesionales.ProfesionalExterno;
import SubsistemaFinanzas.Convenios;
import SubsistemaPaciente.Derivacion.Derivacion;
import SubsistemaPaciente.Fichas.*;
import SubsistemaPaciente.OrdenDeDerivacion.OrdenDerivacion;
import SubsistemaPaciente.Paciente;
import SubsistemaPaciente.programaMedico.ProgramaMedicoDipreca;
import SubsistemaPaciente.programaMedico.ProgramaMedicoJeafosale;
import SubsitemaAgenda.Agenda;
import Usuario.Usuario;
import clienteSandraParada.Login;
import clienteSandraParada.Mensajeria;
import java.awt.Component;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JOptionPane;
import javax.swing.table.DefaultTableModel;
import service.Cita;
import service.HeuristicMixedException_Exception;
import service.HeuristicRollbackException_Exception;

/**
 * Encargada de mostrar los datos enviados a pepelera segun el modulo ingresado
 * @author Mario
 */
public class Papelera extends java.awt.Dialog {

    private Component modulo;

    /**
     *      
     * @param modulo componente que corresponde al modulo que queremos ver la papelera
     */
    public Papelera(java.awt.Frame parent, Component modulo) {
        super(parent);
        this.modulo = modulo;
        initComponents();
        //jPanel5.setBorder(javax.swing.BorderFactory.createTitledBorder(javax.swing.BorderFactory.createEmptyBorder(1, 1, 1, 1), "Papelera ", javax.swing.border.TitledBorder.CENTER, javax.swing.border.TitledBorder.TOP, new java.awt.Font("Tahoma", 0, 36))); // NOI18N        
        this.setModal(true);
        this.setLocationRelativeTo(null);
        this.cargarDatos();
        this.keyListenerBuscar();
        if (this.tablaContenedora.getRowCount() == 0) {
            this.jLabel5.setText("No existen datos para mostrar");
        }
        if (Login.getUser().getTipoCuenta().equals("Administrador") || Login.getUser().getTipoCuenta().equals("Secretaria")) {
            if (modulo instanceof PanelKine || modulo instanceof PanelPediatria || modulo instanceof PanelPodologia
                    || modulo instanceof PanelSicologia || modulo instanceof PanelSiquiatra) {
                this.botonRestaurar.setEnabled(false);
            }
        }
    }

    /**
     * This method is called from within the constructor to initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is always
     * regenerated by the Form Editor.
     */
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        jPanel1 = new javax.swing.JPanel();
        jPanel5 = new javax.swing.JPanel();
        jLabel4 = new javax.swing.JLabel();
        jTextField1 = new javax.swing.JTextField();
        jScrollPane4 = new javax.swing.JScrollPane();
        tablaContenedora = new javax.swing.JTable();
        jPanel6 = new javax.swing.JPanel();
        jLabel5 = new javax.swing.JLabel();
        jPanel7 = new javax.swing.JPanel();
        botonRestaurar = new javax.swing.JButton();

        addWindowListener(new java.awt.event.WindowAdapter() {

            public void windowClosing(java.awt.event.WindowEvent evt) {
                closeDialog(evt);
            }
        });

        jPanel1.setPreferredSize(new java.awt.Dimension(953, 603));

        jPanel5.setBackground(new java.awt.Color(255, 255, 255));
        jPanel5.setBorder(javax.swing.BorderFactory.createTitledBorder(javax.swing.BorderFactory.createEmptyBorder(1, 1, 1, 1), "Papelera", javax.swing.border.TitledBorder.CENTER, javax.swing.border.TitledBorder.TOP, new java.awt.Font("Tahoma", 0, 36))); // NOI18N

        jLabel4.setText("Buscar ");

        tablaContenedora.setModel(new javax.swing.table.DefaultTableModel(
                new Object[][]{},
                new String[]{
                    "Tipo de cuenta", "Rut", "Usuario", "E-mail", "Celular", "Seleccionar"
                }) {

            Class[] types = new Class[]{
                java.lang.String.class, java.lang.String.class, java.lang.String.class, java.lang.String.class, java.lang.Integer.class, java.lang.Boolean.class
            };
            boolean[] canEdit = new boolean[]{
                false, false, false, false, false, true
            };

            public Class getColumnClass(int columnIndex) {
                return types[columnIndex];
            }

            public boolean isCellEditable(int rowIndex, int columnIndex) {
                return canEdit[columnIndex];
            }
        });
        tablaContenedora.getTableHeader().setReorderingAllowed(false);
        jScrollPane4.setViewportView(tablaContenedora);

        javax.swing.GroupLayout jPanel5Layout = new javax.swing.GroupLayout(jPanel5);
        jPanel5.setLayout(jPanel5Layout);
        jPanel5Layout.setHorizontalGroup(
                jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel5Layout.createSequentialGroup().addGap(728, 728, 728).addComponent(jLabel4).addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED).addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, 176, javax.swing.GroupLayout.PREFERRED_SIZE)).addGroup(jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addComponent(jScrollPane4, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 943, Short.MAX_VALUE)));
        jPanel5Layout.setVerticalGroup(
                jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGroup(jPanel5Layout.createSequentialGroup().addGroup(jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE).addComponent(jLabel4).addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)).addContainerGap(373, Short.MAX_VALUE)).addGroup(jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGroup(jPanel5Layout.createSequentialGroup().addGap(46, 46, 46).addComponent(jScrollPane4, javax.swing.GroupLayout.DEFAULT_SIZE, 352, Short.MAX_VALUE).addGap(47, 47, 47))));

        jPanel6.setBackground(new java.awt.Color(255, 255, 255));

        jLabel5.setText("Área de Mensajería ");

        javax.swing.GroupLayout jPanel6Layout = new javax.swing.GroupLayout(jPanel6);
        jPanel6.setLayout(jPanel6Layout);
        jPanel6Layout.setHorizontalGroup(
                jPanel6Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGroup(jPanel6Layout.createSequentialGroup().addContainerGap().addComponent(jLabel5, javax.swing.GroupLayout.PREFERRED_SIZE, 292, javax.swing.GroupLayout.PREFERRED_SIZE).addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)));
        jPanel6Layout.setVerticalGroup(
                jPanel6Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addComponent(jLabel5, javax.swing.GroupLayout.DEFAULT_SIZE, 27, Short.MAX_VALUE));

        jPanel7.setBackground(new java.awt.Color(255, 255, 255));

        botonRestaurar.setIcon(new javax.swing.ImageIcon(getClass().getResource("/GUI/Img/Iconos35X35/Restaurar.png"))); // NOI18N
        botonRestaurar.setText("Restaurar");
        botonRestaurar.setHorizontalTextPosition(javax.swing.SwingConstants.RIGHT);
        botonRestaurar.setMargin(new java.awt.Insets(2, 4, 2, 6));
        botonRestaurar.setMaximumSize(new java.awt.Dimension(97, 43));
        botonRestaurar.setMinimumSize(new java.awt.Dimension(97, 43));
        botonRestaurar.setPreferredSize(new java.awt.Dimension(97, 43));
        botonRestaurar.addActionListener(new java.awt.event.ActionListener() {

            public void actionPerformed(java.awt.event.ActionEvent evt) {
                botonRestaurarActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout jPanel7Layout = new javax.swing.GroupLayout(jPanel7);
        jPanel7.setLayout(jPanel7Layout);
        jPanel7Layout.setHorizontalGroup(
                jPanel7Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel7Layout.createSequentialGroup().addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE).addComponent(botonRestaurar, javax.swing.GroupLayout.PREFERRED_SIZE, 108, javax.swing.GroupLayout.PREFERRED_SIZE).addContainerGap()));
        jPanel7Layout.setVerticalGroup(
                jPanel7Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGroup(jPanel7Layout.createSequentialGroup().addContainerGap().addComponent(botonRestaurar, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE).addContainerGap()));

        javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
        jPanel1.setLayout(jPanel1Layout);
        jPanel1Layout.setHorizontalGroup(
                jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addComponent(jPanel6, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE).addComponent(jPanel7, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE).addComponent(jPanel5, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE));
        jPanel1Layout.setVerticalGroup(
                jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup().addComponent(jPanel5, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE).addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED).addComponent(jPanel7, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE).addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED).addComponent(jPanel6, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)));

        add(jPanel1, java.awt.BorderLayout.CENTER);

        pack();
    }// </editor-fold>//GEN-END:initComponents

    /**
     * Closes the dialog
     */
    private void closeDialog(java.awt.event.WindowEvent evt) {//GEN-FIRST:event_closeDialog
        setVisible(false);
        dispose();
    }//GEN-LAST:event_closeDialog

    /**
     * Restaura uno o varios objetos pertenecientes a la papelera del modulo ingresado
     */
    private void botonRestaurarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_botonRestaurarActionPerformed
        if (this.tablaContenedora.getSelectedRows().length > 0) {
            DefaultTableModel modelo = (DefaultTableModel) this.tablaContenedora.getModel();
            int lineas[] = this.tablaContenedora.getSelectedRows();
            this.dispose();
            if (modulo instanceof Usuario) {
                service.Privilegios p = (service.Privilegios) cargarPrivilegios(Login.getUser().getRut());
                if (p.isRestaurarUsuario()) {
                    service.Usuario us = new service.Usuario();
                    for (int i = lineas.length - 1; i >= 0; i--) {
                        us = (service.Usuario) cargarUsuario((String) modelo.getValueAt(lineas[i], 1));
                        us.setActivo(true);
                        modificarUsuario(us);
                        modelo.removeRow(lineas[i]);
                        Usuario usuario = (Usuario) modulo;
                        usuario.getjLabel5().setText(Mensajeria.mensajeDeAccion("Usuario", "restaurar"));
                        String valorNuevo = "Rut: " + us.getRut() + "\n" + "Nombres: " + us.getNombres() + "\n" + "Apellido Paterno: " + us.getApellidoPaterno() + "Apellido Materno: " + us.getApellidoMaterno()
                                + "\n" + "Usuario: " + us.getUsuario() + "\n" + "Bloque: " + us.getBloque() + "\n" + "Calle: " + us.getCalle() + "\n" + "Celular: " + us.getCelular() + "\n" + "Comuna: " + us.getComuna() + "\n" + "Departamento: " + us.getDepto() + "\n" + "Email: " + us.getEmail()
                                + "\n" + "Fecha nacimiento: " + us.getFechaNac() + "\n" + "Número calle: " + us.getNumero() + "\n" + "Provincia: " + us.getProvincia()
                                + "\n" + "Región: " + us.getRegion() + "\n" + "Sector: " + us.getSector() + "\n" + "Teléfono: " + us.getTelefono() + "\n" + "Tipo cuenta: " + us.getTipoCuenta();
                        registrar(Login.getUser(), "Papelera", "Restauró usuario: " + us.getRut(), "No aplica", valorNuevo);
                    }
                    ((Usuario) modulo).actualizarTabla((java.util.List<service.Usuario>) listarUsuarios());
                } else {
                    JOptionPane.showMessageDialog(this, "No tiene permisos para esta acción, \n contacte al administrador para más información");
                }
            } else if (modulo instanceof Agenda) {
                service.Privilegios p = (service.Privilegios) cargarPrivilegios(Login.getUser().getRut());
                if (p.isRestaurarCita()) {
                    service.Cita cita = new service.Cita();
                    for (int i = lineas.length - 1; i >= 0; i--) {
                        cita = (Cita) buscarCitaPorId((Long) modelo.getValueAt(lineas[i], 0));
                        cita.setVisible(true);
                        modificarCita(cita);
                        modelo.removeRow(lineas[i]);
                        String valorNuevo = "Rut profesional: " + cita.getRutProfesional() + "\n" + "Rut paciente: " + cita.getRutPaciente() + "\n" + "Estado : " + cita.getEstado();
                        registrar(Login.getUser(), "Papelera", "Restauró cita a profesional:" + cita.getRutProfesional() + "de paciente :" + cita.getRutPaciente(), "No aplica", valorNuevo);
                    }
                    Agenda a = (Agenda) modulo;
                    if (lineas.length > 1) {
                        a.campoMensajeria.setText("Las citas han sido restauradas exitosamente");
                    } else {
                        a.campoMensajeria.setText("La cita ha sido restaurada exitosamente");
                    }
                    if (a.botonAgendaDiaria.isSelected()) {
                        a.dia.llenarTabla();
                        a.dia.mostrarPanelCita((ArrayList<Cita>) a.dia.jTable1.getValueAt(a.dia.jTable1.getSelectedRow(), a.dia.jTable1.getSelectedColumn()));
                    } else {
                        a.semana.llenarTabla();
                        a.semana.mostrarPanelCita((ArrayList<Cita>) a.semana.jTable1.getValueAt(a.semana.jTable1.getSelectedRow(), a.semana.jTable1.getSelectedColumn()));
                    }
                } else {
                    JOptionPane.showMessageDialog(this, "No tiene permisos para esta acción, \n contacte al administrador para más información");
                }


            } else if (this.modulo instanceof Paciente) {
                service.Privilegios pri = (service.Privilegios) cargarPrivilegios(Login.getUser().getRut());
                if (pri.isRestaurarPaciente()) {
                    for (int i = lineas.length - 1; i >= 0; i--) {
                        String rut = (String) modelo.getValueAt(lineas[i], 0);
                        String nombre = modelo.getValueAt(lineas[i], 1).toString() + " " + modelo.getValueAt(lineas[i], 2).toString() + " " + modelo.getValueAt(lineas[i], 3).toString();
                        restaurarPaciente(rut);
                        modelo.removeRow(lineas[i]);
                        String valorNuevo = "Rut: " + rut + "\n" + "Nombre: " + nombre;
                        registrar(Login.getUser(), "Papelera", "Restauró paciente: " + rut, "No aplica", valorNuevo);

                    }
                    Paciente pa = (Paciente) modulo;
                    pa.actualizarTabla();
                } else {
                    JOptionPane.showMessageDialog(this, "No tiene permisos para esta acción, \n contacte al administrador para más información");
                }
            } else if (this.modulo instanceof Derivacion) {
                service.Privilegios pri = (service.Privilegios) cargarPrivilegios(Login.getUser().getRut());
                if (pri.isRestaurarDerivacion()) {
                    service.Derivacion p = new service.Derivacion();
                    for (int i = lineas.length - 1; i >= 0; i--) {
                        restaurarDerivacion((Long) modelo.getValueAt(lineas[i], 0));
                        modelo.removeRow(lineas[i]);
                        String nuevo = "Rut paciente: " + p.getRutPaciente() + "\n"
                                + "Rut profesional: " + p.getRutProfesional() + "\n"
                                + "Fecha: " + p.getFecha() + "\n"
                                + "Descripción: " + p.getDescripcion();
                        registrar(Login.getUser(), "Papelera", "Restauró derivación a profesional:" + p.getRutProfesional() + "de paciente :" + p.getRutPaciente(), "No aplica", nuevo);
                    }
                    Derivacion der = (Derivacion) modulo;
                    der.actualizarTabla();
                } else {
                    JOptionPane.showMessageDialog(this, "No tiene permisos para esta acción, \n contacte al administrador para más información");
                }

            } else if (this.modulo instanceof OrdenDerivacion) {
                service.Privilegios pri = (service.Privilegios) cargarPrivilegios(Login.getUser().getRut());
                if (pri.isRestaurarOrdenDerivacion()) {
                    service.OrdenDeDerivacion o = new service.OrdenDeDerivacion();
                    for (int i = lineas.length - 1; i >= 0; i--) {
                        o = (service.OrdenDeDerivacion) buscarOrdenDeDerivacion((Long) modelo.getValueAt(lineas[i], 0));
                        o.setVisible(true);
                        modificarOrdenDeDerivacion(o);
                        modelo.removeRow(lineas[i]);
                        String valorNuevo = " Rut profesional:" + o.getRutProfesional() + "\n" + " Rut paciente:" + o.getRutPaciente() + "\n" + " Especialidad:" + o.getEspecialidad() + "\n" + " Diagnóstico:" + o.getDiagnostico() + "\n" + " Fecha emisión:" + o.getFechaEmision();
                        registrar(Login.getUser(), "Papelera", "Restauró orden de derivación a profesional externo:" + o.getRutProfesional() + "de paciente :" + o.getRutPaciente(), "No aplica", valorNuevo);
                    }
                    OrdenDerivacion or = (OrdenDerivacion) modulo;
                    or.actualizarTabla();
                } else {
                    JOptionPane.showMessageDialog(this, "No tiene permisos para esta acción, \n contacte al administrador para más información");
                }
            } else if (modulo instanceof PanelKine) {
                service.Privilegios pri = (service.Privilegios) cargarPrivilegios(Login.getUser().getRut());
                if (pri.isRestaurarFichaKinesiologia()) {
                    service.FichaClinica ficha = new service.FichaClinica();
                    for (int i = lineas.length - 1; i >= 0; i--) {
                        try {
                            Long fichaClinica = (Long) modelo.getValueAt(lineas[i], 0);
                            ficha = buscarFicha(fichaClinica);
                            ficha.setActivo(true);
                            modificarFicha(ficha);
                            modelo.removeRow(lineas[i]);
                            String valorNuevo = "Profesional: " + ficha.getProfesional() + "\n" + "Paciente : " + ficha.getPaciente() + "\n" + "Diagnóstico: " + ficha.getDiagnostico() + "\n" + "Fecha ingreso : " + ficha.getFechaIngreso();
                            registrar(Login.getUser(), "Papelera", "Restauró ficha kinesiología a profesional:" + ficha.getProfesional() + "de paciente :" + ficha.getPaciente(), "No aplica", valorNuevo);
                            ((PanelKine) modulo).cargarFichas((java.util.List<service.FichaClinica>) listarFichasClinicas());
                            this.dispose();
                        } catch (HeuristicMixedException_Exception ex) {
                            Logger.getLogger(Papelera.class.getName()).log(Level.SEVERE, null, ex);
                        } catch (HeuristicRollbackException_Exception ex) {
                            Logger.getLogger(Papelera.class.getName()).log(Level.SEVERE, null, ex);
                        }
                    }
                } else {
                    JOptionPane.showMessageDialog(this, "No tiene permisos para esta acción, \n contacte al administrador para más información");
                }
            } else if (modulo instanceof PanelPodologia) {
                service.Privilegios pri = (service.Privilegios) cargarPrivilegios(Login.getUser().getRut());
                if (pri.isRestaurarFichaPodologia()) {
                    service.FichaPodologa ficha = new service.FichaPodologa();
                    for (int i = lineas.length - 1; i >= 0; i--) {
                        Long fichaClinica = (Long) modelo.getValueAt(lineas[i], 0);
                        ficha = buscarFichaPodo(fichaClinica);
                        ficha.setActivo(true);
                        modificarFichaPodo(ficha);
                        modelo.removeRow(lineas[i]);
                        String valorNuevo = "Profesional: " + ficha.getProfesional() + "\n" + "Paciente : " + ficha.getPaciente() + "\n" + "Medicamentos: " + ficha.getMedicamentos() + "\n" + "Número calzado: " + ficha.getNumeroCalzado();
                        registrar(Login.getUser(), "Papelera", "Restauró ficha podología a profesional:" + ficha.getProfesional() + "de paciente :" + ficha.getPaciente(), "No aplica", valorNuevo);
                        ((PanelPodologia) modulo).cargarFichas((java.util.List<service.FichaPodologa>) listarFichasPodologa());
                        this.dispose();
                    }
                } else {
                    JOptionPane.showMessageDialog(this, "No tiene permisos para esta acción, \n contacte al administrador para más información");
                }
            } else if (modulo instanceof PanelSicologia) {
                service.Privilegios pri = (service.Privilegios) cargarPrivilegios(Login.getUser().getRut());
                if (pri.isRestaurarFichaPsicologia()) {
                    service.FichaSicologa ficha = new service.FichaSicologa();
                    for (int i = lineas.length - 1; i >= 0; i--) {
                        Long fichaClinica = (Long) modelo.getValueAt(lineas[i], 0);
                        ficha = buscarFichaSico(fichaClinica);
                        ficha.setActivo(true);
                        modificarFichaSico(ficha);
                        modelo.removeRow(lineas[i]);
                        String valorNuevo = "Profesional: " + ficha.getProfesional() + "\n" + "Paciente : " + ficha.getPaciente() + "\n" + "Diagnóstico: " + ficha.getDiagnostico() + "\n" + "Fecha primera consulta : " + ficha.getFechaPrimeraConsulta();
                        registrar(Login.getUser(), "Papelera", "Restauró ficha sicología a profesional:" + ficha.getProfesional() + "de paciente :" + ficha.getPaciente(), "No aplica", valorNuevo);
                        ((PanelSicologia) modulo).cargarFichas((java.util.List<service.FichaSicologa>) listarFichasSicologa());
                    }
                } else {
                    JOptionPane.showMessageDialog(this, "No tiene permisos para esta acción, \n contacte al administrador para más información");
                }
            } else if (modulo instanceof PanelPediatria) {
                service.Privilegios pri = (service.Privilegios) cargarPrivilegios(Login.getUser().getRut());
                if (pri.isRestaurarFichaPediatria()) {
                    service.FichaPediatra ficha = new service.FichaPediatra();
                    for (int i = lineas.length - 1; i >= 0; i--) {
                        Long fichaClinica = (Long) modelo.getValueAt(lineas[i], 0);
                        ficha = buscarFichaPedi(fichaClinica);
                        ficha.setActivo(true);
                        modificarFichaPedi(ficha);
                        modelo.removeRow(lineas[i]);
                        String valorNuevo = "Profesional: " + ficha.getProfesional() + "\n" + "Paciente : " + ficha.getPaciente() + "\n" + "Antecedentes familiares: " + ficha.getAntecedentesFamiliares();
                        registrar(Login.getUser(), "Papelera", "Restauró ficha pediatría a profesional:" + ficha.getProfesional() + "de paciente :" + ficha.getPaciente(), "No aplica", valorNuevo);
                        ((PanelPediatria) modulo).cargarFichas((java.util.List<service.FichaPediatra>) listarFichasPediatra());
                        this.dispose();
                    }
                } else {
                    JOptionPane.showMessageDialog(this, "No tiene permisos para esta acción, \n contacte al administrador para más información");
                }
            } else if (modulo instanceof Convenios) {
                service.Privilegios pri = (service.Privilegios) cargarPrivilegios(Login.getUser().getRut());
                if (pri.isRestaurarConvenio()) {
                    service.Convenio convenio = new service.Convenio();
                    for (int i = lineas.length - 1; i >= 0; i--) {
                        convenio = buscarConvenio((String) modelo.getValueAt(lineas[i], 0));
                        convenio.setActivo(true);
                        boolean c = modificarConvenio(convenio);
                        modelo.removeRow(lineas[i]);
                    }
                    ((Convenios) modulo).cargarTablaConvenios((java.util.List<service.Convenio>) listarConvenios());
                    this.dispose();
                } else {
                    JOptionPane.showMessageDialog(this, "No tiene permisos para esta acción, contacte al administrador para más información");
                }
            } else if (this.modulo instanceof FichaMedicoGeneral) {
                service.Privilegios pri = (service.Privilegios) cargarPrivilegios(Login.getUser().getRut());
                if (pri.isRestaurarFichaMedicinaGeneral()) {
                    service.FichaMedicoGeneral o = new service.FichaMedicoGeneral();
                    for (int i = lineas.length - 1; i >= 0; i--) {
                        o = (service.FichaMedicoGeneral) obtenerFichaFarfan((Long) modelo.getValueAt(lineas[i], 0));
                        o.setValido(true);
                        editarFichaFarfan(o);
                        modelo.removeRow(lineas[i]);
                        String valorNuevo = "Rut paciente: " + o.getRutPaciente() + "\n" + "Alergias: " + o.getAlergias() + "\n" + "Antecedentes: " + o.getAntedecentes() + "\n" + "Diagnóstico: " + o.getDiagnostico() + "\n" + "FC: " + o.getFc() + "\n" + "Fecha ingreso: " + o.getFechaIngreso() + "\n" + "IMC: " + o.getImc() + "\n" + "Indicaciones: " + o.getIndicaciones() + "\n" + "PA: " + o.getPa() + "\n" + "Peso: " + o.getPeso() + "\n" + "Talla: " + o.getTalla() + "\n" + "Temperatura: " + o.getTemp();
                        registrar(Login.getUser(), "Papelera", "Restauró Ficha Médico general a profesional:" + o.getRutProfesional() + "de paciente :" + o.getRutPaciente(), "No aplica", valorNuevo);
                    }
                    FichaMedicoGeneral or = (FichaMedicoGeneral) modulo;
                    or.actualizarTabla();
                    this.dispose();
                } else {
                    JOptionPane.showMessageDialog(this, "No tiene permisos para esta acción, \n contacte al administrador para más información");
                }
            } else if (modulo instanceof ProfesionalExterno) {
                service.Privilegios pri = (service.Privilegios) cargarPrivilegios(Login.getUser().getRut());
                if (pri.isRestaurarProfesionalExterno()) {
                    service.ProfesionalExterno profExterno = new service.ProfesionalExterno();
                    for (int i = lineas.length - 1; i >= 0; i--) {
                        profExterno = (service.ProfesionalExterno) cargarProfesionalExterno((String) modelo.getValueAt(lineas[i], 0));
                        profExterno.setActivo(true);
                        modificarProfesionalExterno(profExterno);
                        modelo.removeRow(lineas[i]);
                        ProfesionalExterno profesional = (ProfesionalExterno) modulo;
                        profesional.getjLabel5().setText(Mensajeria.mensajeDeAccion("Profesional Externo", "restaurar"));

                        String valorNuevo = "Rut: " + profExterno.getRut() + "\n" + "Nombres: " + profExterno.getNombres() + "\n" + "Apellido paterno: " + profExterno.getApellidoPaterno() + "\n" + "Apellido materno: " + profExterno.getApellidoMaterno() + "\n" + "Lugar de trabajo: " + profExterno.getLugarDeTrabajo();
                        registrar(Login.getUser(), "Papelera", "Restauró profesional externo: " + profExterno.getRut(), "No aplica", valorNuevo);
                    }
                    ((ProfesionalExterno) modulo).actualizarTabla((java.util.List<service.ProfesionalExterno>) listarProfesionalesExternos());
                    this.dispose();
                } else {
                    JOptionPane.showMessageDialog(this, "No tiene permisos para esta acción, \n contacte al administrador para más información");
                }
            } else if (this.modulo instanceof Derivacion) {
                for (int i = lineas.length - 1; i >= 0; i--) {
                    Long id = (Long) modelo.getValueAt(lineas[i], 0);
                    service.Derivacion o = (service.Derivacion) cargarDerivacion(id);
                    restaurarDerivacion(id);
                    modelo.removeRow(lineas[i]);
                    String nuevo = "Rut paciente: " + o.getRutPaciente() + "\n"
                            + "Rut profesional: " + o.getRutProfesional() + "\n"
                            + "Fecha: " + o.getFecha() + "\n"
                            + "Descripción: " + o.getDescripcion();
                    registrar(Login.getUser(), "Papelera", "Restauró derivación a profesional:" + o.getRutProfesional() + "de paciente :" + o.getRutPaciente(), "No aplica", nuevo);
                }
                Paciente pa = (Paciente) modulo;
                pa.actualizarTabla();
            } else if (modulo instanceof PanelSiquiatra) {
                service.Privilegios p = (service.Privilegios) cargarPrivilegios(Login.getUser().getRut());
                if (p.isRestaurarFichaSiquiatria()) {
                    service.FichaSiquiatra ficha = new service.FichaSiquiatra();
                    for (int i = lineas.length - 1; i >= 0; i--) {
                        Long fichaClinica = (Long) modelo.getValueAt(lineas[i], 0);
                        ficha = (service.FichaSiquiatra) cargarFichaSiquiatra(fichaClinica);
                        ficha.setActivo(true);
                        modificarFichaSiqui(ficha);
                        modelo.removeRow(lineas[i]);
                        String valorNuevo = "Profesional: " + ficha.getProfesional() + "\n" + "Paciente : " + ficha.getPaciente() + "\n" + "Diagnóstico: " + ficha.getDiagnostico() + "\n" + "Fecha ingreso : " + ficha.getFechaIngreso();
                        registrar(Login.getUser(), "Papelera", "Restauró ficha siquiatría a profesional:" + ficha.getProfesional() + "de paciente :" + ficha.getPaciente(), "No aplica", valorNuevo);
                        ((PanelSiquiatra) modulo).cargarFichas((java.util.List<service.FichaSiquiatra>) listarFichasSiquiatra());
                        this.dispose();
                    }
                } else {
                    JOptionPane.showMessageDialog(this, "No tiene permisos para esta acción, \n contacte al administrador para más información");
                }
            }

        } else {
            this.jLabel5.setText("Debe seleccionar un elemento para ser restaurado");
        }


    }//GEN-LAST:event_botonRestaurarActionPerformed

    /**
     * Carga los datos eliminados segun el modulo a la tabla contenedora de la papelera
     * Da formato a la tabla con el contenido de las columnas que correspondan
     */
    public void ocultarColumnaID() {
        tablaContenedora.getColumnModel().getColumn(0).setMaxWidth(0);
        tablaContenedora.getColumnModel().getColumn(0).setMinWidth(0);
        tablaContenedora.getColumnModel().getColumn(0).setPreferredWidth(0);
    }

    private void cargarDatos() {
        Object[][] data = null;

        if (this.modulo instanceof Agenda) {
            List<service.Cita> list = null;
            if (Login.getUser().getTipoCuenta().equals("Profesional")) {
                list = listarCitasPapeleraParaProfesional(Login.getUser().getRut());
            } else {
                list = (List<service.Cita>) listarCitasPapelera();
            }
            String[] columNames = {"ID", "Rut paciente", "Nombre paciente", "Rut profesional", "Nombre profesional", "Fecha", "Hora", "Numero sesión", "Observación", "Estado"};
            if (!list.isEmpty()) {
                data = new Object[list.size()][columNames.length];
            }
            for (int i = 0; i < list.size(); i++) {
                service.Paciente p = (service.Paciente) cargarPaciente(list.get(i).getRutPaciente());
                service.Usuario u = (service.Usuario) cargarUsuario(list.get(i).getRutProfesional());
                data[i][0] = list.get(i).getId();
                data[i][1] = list.get(i).getRutPaciente();
                data[i][2] = p.getNombres() + " " + p.getApellidoPaterno() + " " + p.getApellidoMaterno();
                data[i][3] = list.get(i).getRutProfesional();
                data[i][4] = u.getNombres() + " " + u.getApellidoPaterno() + " " + u.getApellidoMaterno();
                data[i][5] = new SimpleDateFormat("dd/MM/yyyy").format(list.get(i).getFecha().toGregorianCalendar().getTime());
                data[i][6] = list.get(i).getDesdeHora() + ":" + list.get(i).getDesdeMinuto();
                data[i][7] = list.get(i).getNumeroSesion();
                data[i][8] = list.get(i).getObservacion();
                data[i][9] = list.get(i).getEstado();
            }
            this.tablaContenedora.setModel(new DefaultTableModel(data, columNames));
            ocultarColumnaID();
        } else if (this.modulo instanceof Usuario) {
            java.util.List<service.Usuario> usuariosEliminados = (java.util.List<service.Usuario>) listarUsuarios();
            String[] columNames = {"Tipo de cuenta", "Rut", "Usuario", "E-mail", "Celular"};
            int size = usuariosEliminados.size();
            for (int i = 0; i < usuariosEliminados.size(); i++) {
                if (usuariosEliminados.get(i).isActivo()) {
                    usuariosEliminados.remove(i);
                    i--;
                }
            }
            if (!usuariosEliminados.isEmpty()) {
                data = new Object[usuariosEliminados.size()][columNames.length];
            }
            for (int i = 0; i < usuariosEliminados.size(); i++) {
                if (usuariosEliminados.get(i).isActivo() == false) {
                    data[i][0] = usuariosEliminados.get(i).getTipoCuenta();
                    data[i][1] = usuariosEliminados.get(i).getRut();
                    data[i][2] = usuariosEliminados.get(i).getUsuario();
                    data[i][3] = usuariosEliminados.get(i).getEmail();
                    data[i][4] = usuariosEliminados.get(i).getCelular();
                }
            }
            this.tablaContenedora.setModel(new DefaultTableModel(data, columNames));
        } else if (this.modulo instanceof Paciente) {
            java.util.List<service.Paciente> pacientes = listarPacientes();
            String[] columNames = {"Rut", "Nombres", "Apellido Paterno", "Apellido Materno"};
            int size = pacientes.size();
            for (int i = 0; i < pacientes.size(); i++) {
                if (pacientes.get(i).isVisible()) {
                    pacientes.remove(i);
                    i--;
                }
            }

            if (!pacientes.isEmpty()) {
                data = new Object[pacientes.size()][columNames.length];
            }
            for (int i = 0; i < pacientes.size(); i++) {
                if (!pacientes.get(i).isVisible()) {
                    data[i][0] = pacientes.get(i).getRut();
                    data[i][1] = pacientes.get(i).getNombres();
                    data[i][2] = pacientes.get(i).getApellidoPaterno();
                    data[i][3] = pacientes.get(i).getApellidoMaterno();
                }
            }
            this.tablaContenedora.setModel(new DefaultTableModel(data, columNames));

        } else if (this.modulo instanceof OrdenDerivacion) {
            java.util.List<service.OrdenDeDerivacion> ordenes = listarDerivaciones();
            String[] columNames = {"ID", "Rut profesional", "Rut paciente", "Especialidad", "Diagnóstico", "Fecha emisión"};
            int size = ordenes.size();
            for (int i = 0; i < ordenes.size(); i++) {
                if (ordenes.get(i).isVisible()) {
                    ordenes.remove(i);
                    i--;
                }
            }
            if (!ordenes.isEmpty()) {
                data = new Object[ordenes.size()][columNames.length];
            }
            for (int i = 0; i < ordenes.size(); i++) {
                if (ordenes.get(i).isVisible() == false) {
                    data[i][0] = ordenes.get(i).getId();
                    data[i][1] = ordenes.get(i).getRutProfesional();
                    data[i][2] = ordenes.get(i).getRutPaciente();
                    data[i][3] = ordenes.get(i).getEspecialidad();
                    data[i][4] = ordenes.get(i).getDiagnostico();
                    data[i][5] = ordenes.get(i).getFechaEmision();
                }
            }
            this.tablaContenedora.setModel(new DefaultTableModel(data, columNames));
            ocultarColumnaID();
        } else if (this.modulo instanceof Convenios) {
            java.util.List<service.Convenio> convenios = listarConvenios();
            String[] columNames = {"Rut","Nombre", "Porcentaje", "Forma de pago"};
            int size = convenios.size();
            for (int i = 0; i < convenios.size(); i++) {
                if (convenios.get(i).isActivo()) {
                    convenios.remove(i);
                    i--;
                }
            }
            if (!convenios.isEmpty()) {
                data = new Object[convenios.size()][columNames.length];
            }
            for (int i = 0; i < convenios.size(); i++) {
                if (convenios.get(i).isActivo() == false) {
                    service.ProfesionalExterno pro= (service.ProfesionalExterno) cargarProfesionalExterno(convenios.get(i).getRutInstitucion());
                    data[i][0] = convenios.get(i).getRutInstitucion();
                    data[i][1] = pro.getNombres()+" "+pro.getApellidoPaterno()+" "+pro.getApellidoMaterno();
                    data[i][2] = convenios.get(i).getPorcentaje();
                    data[i][3] = convenios.get(i).getFormaPago();
                }
            }
            this.tablaContenedora.setModel(new DefaultTableModel(data, columNames));
        } else if (this.modulo instanceof PanelKine) {
            java.util.List<service.FichaClinica> fichas = listarFichasClinicas();
            String[] columNames = {"ID", "Rut","Nombre", "Diagnóstico", "Patologías", "Tratamiento"};
            int size = fichas.size();
            for (int i = 0; i < fichas.size(); i++) {
                if (fichas.get(i).isActivo() || !fichas.get(i).getProfesional().equals(Login.getUser().getRut())) {
                    fichas.remove(i);
                    i--;
                }
            }
            if (!fichas.isEmpty()) {
                data = new Object[fichas.size()][columNames.length];
            }
            for (int i = 0; i < fichas.size(); i++) {
                if (fichas.get(i).isActivo() == false && fichas.get(i).getProfesional().equals(Login.getUser().getRut())) {
                    data[i][0] = fichas.get(i).getId();
                    data[i][1] = fichas.get(i).getPaciente();
                    //busco el nombre del paciente
                    service.Paciente pro= (service.Paciente) cargarPaciente(fichas.get(i).getPaciente());
                    data[i][2] = pro.getNombres()+" "+pro.getApellidoPaterno()+" "+pro.getApellidoMaterno();
                    data[i][3] = fichas.get(i).getDiagnostico();
                    data[i][4] = fichas.get(i).getPatologia();
                    data[i][5] = fichas.get(i).getTratamiento();
                }
            }
            this.tablaContenedora.setModel(new DefaultTableModel(data, columNames));
            ocultarColumnaID();
        } else if (this.modulo instanceof PanelPodologia) {
            java.util.List<service.FichaPodologa> fichas = listarFichasPodologa();
            String[] columNames = {"ID", "Rut","Nombre", "Número calzado", "Medicamentos"};
            int size = fichas.size();
            for (int i = 0; i < fichas.size(); i++) {
                if (fichas.get(i).isActivo() || !fichas.get(i).getProfesional().equals(Login.getUser().getRut())) {
                    fichas.remove(i);
                    i--;
                }
            }
            if (!fichas.isEmpty()) {
                data = new Object[fichas.size()][columNames.length];
            }
            for (int i = 0; i < fichas.size(); i++) {
                if (fichas.get(i).isActivo() == false && fichas.get(i).getProfesional().equals(Login.getUser().getRut())) {
                    data[i][0] = fichas.get(i).getId();
                    data[i][1] = fichas.get(i).getPaciente();
                    service.Paciente pro= (service.Paciente) cargarPaciente(fichas.get(i).getPaciente());
                    data[i][2] = pro.getNombres()+" "+pro.getApellidoPaterno()+" "+pro.getApellidoMaterno();
                    data[i][3] = fichas.get(i).getNumeroCalzado();
                    data[i][4] = fichas.get(i).getMedicamentos();
                }
            }
            this.tablaContenedora.setModel(new DefaultTableModel(data, columNames));
            ocultarColumnaID();
        } else if (this.modulo instanceof PanelSicologia) {
            java.util.List<service.FichaSicologa> fichas = listarFichasSicologa();
            String[] columNames = {"ID", "Rut","Nombre", "Fecha primera consulta", "Diagnóstico"};
            int size = fichas.size();
            for (int i = 0; i < fichas.size(); i++) {
                if (fichas.get(i).isActivo() || !fichas.get(i).getProfesional().equals(Login.getUser().getRut())) {
                    fichas.remove(i);
                    i--;
                }
            }
            if (!fichas.isEmpty()) {
                data = new Object[fichas.size()][columNames.length];
            }
            for (int i = 0; i < fichas.size(); i++) {
                if (fichas.get(i).isActivo() == false && fichas.get(i).getProfesional().equals(Login.getUser().getRut())) {
                    data[i][0] = fichas.get(i).getId();
                    data[i][1] = fichas.get(i).getPaciente();
                    service.Paciente pro= (service.Paciente) cargarPaciente(fichas.get(i).getPaciente());
                    data[i][2] = pro.getNombres()+" "+pro.getApellidoPaterno()+" "+pro.getApellidoMaterno();
                    data[i][3] = fichas.get(i).getFechaPrimeraConsulta();
                    data[i][4] = fichas.get(i).getDiagnostico();
                }
            }
            this.tablaContenedora.setModel(new DefaultTableModel(data, columNames));
            ocultarColumnaID();
        } else if (this.modulo instanceof PanelPediatria) {
            java.util.List<service.FichaPediatra> fichas = listarFichasPediatra();
            String[] columNames = {"ID", "Rut","Nombre", "Nombre madre", "Nombre padre", "Patología embarazo"};
            int size = fichas.size();
            for (int i = 0; i < fichas.size(); i++) {
                if (fichas.get(i).isActivo() || !fichas.get(i).getProfesional().equals(Login.getUser().getRut())) {
                    fichas.remove(i);
                    i--;
                }
            }
            if (!fichas.isEmpty()) {
                data = new Object[fichas.size()][columNames.length];
            }
            for (int i = 0; i < fichas.size(); i++) {
                if (fichas.get(i).isActivo() == false && fichas.get(i).getProfesional().equals(Login.getUser().getRut())) {
                    data[i][0] = fichas.get(i).getId();
                    data[i][1] = fichas.get(i).getPaciente();
                    service.Paciente pro= (service.Paciente) cargarPaciente(fichas.get(i).getPaciente());
                    data[i][2] = pro.getNombres()+" "+pro.getApellidoPaterno()+" "+pro.getApellidoMaterno();
                    data[i][3] = fichas.get(i).getNombreMadre();
                    data[i][4] = fichas.get(i).getNombrePadre();
                    data[i][5] = fichas.get(i).getPatologiaEmbarazo();
                }
            }
            this.tablaContenedora.setModel(new DefaultTableModel(data, columNames));
            ocultarColumnaID();
        } else if (this.modulo instanceof FichaMedicoGeneral) {
            java.util.List<service.FichaMedicoGeneral> fichas = listarFichasFarfan();
            String[] columNames = {"ID", "Rut paciente", "Diagnóstico", "Fecha ingreso"};
            int size = fichas.size();
            for (int i = 0; i < fichas.size(); i++) {
                if (fichas.get(i).isValido() || !fichas.get(i).getRutProfesional().equals(Login.getUser().getRut())) {
                    fichas.remove(i);
                    i--;
                }
            }
            if (!fichas.isEmpty()) {
                data = new Object[fichas.size()][columNames.length];
            }
            for (int i = 0; i < fichas.size(); i++) {
                if (fichas.get(i).isValido() == false) {
                    data[i][0] = fichas.get(i).getId();
                    data[i][1] = fichas.get(i).getRutPaciente();
                    data[i][2] = fichas.get(i).getDiagnostico();
                    data[i][3] = fichas.get(i).getFechaIngreso();
                }
            }
            this.tablaContenedora.setModel(new DefaultTableModel(data, columNames));
            ocultarColumnaID();
        } else if (this.modulo instanceof ProfesionalExterno) {
            java.util.List<service.ProfesionalExterno> profExternosEliminados = (java.util.List<service.ProfesionalExterno>) listarProfesionalesExternos();
            String[] columNames = {"Rut", "Nombres", "Apellido Paterno", "Especialidad", "Porcentaje"};
            int size = profExternosEliminados.size();
            for (int i = 0; i < profExternosEliminados.size(); i++) {
                if (profExternosEliminados.get(i).isActivo()) {
                    profExternosEliminados.remove(i);
                    i--;
                }
            }
            if (!profExternosEliminados.isEmpty()) {
                data = new Object[profExternosEliminados.size()][columNames.length];
            }
            for (int i = 0; i < profExternosEliminados.size(); i++) {
                if (profExternosEliminados.get(i).isActivo() == false) {
                    data[i][0] = profExternosEliminados.get(i).getRut();
                    data[i][1] = profExternosEliminados.get(i).getNombres();
                    data[i][2] = profExternosEliminados.get(i).getApellidoPaterno();
                    data[i][3] = profExternosEliminados.get(i).getEspecialidad();
                    data[i][4] = profExternosEliminados.get(i).getPorcentaje();
                }
            }
            this.tablaContenedora.setModel(new DefaultTableModel(data, columNames));
        } else if (this.modulo instanceof ProgramaMedicoDipreca) {
            java.util.List<service.ProgramaDipreca> fichas = listarProgramasDipreca();
            String[] columNames = {"Número programa", "Número complementario", "Rut paciente", "Rut profesional tratante", "Rut profesional derivador"};
            int size = fichas.size();
            for (int i = 0; i < fichas.size(); i++) {
                if (fichas.get(i).isVisible()) {
                    fichas.remove(i);
                    i--;
                }
            }
            if (!fichas.isEmpty()) {
                data = new Object[fichas.size()][columNames.length];
            }
            for (int i = 0; i < fichas.size(); i++) {
                if (fichas.get(i).isVisible() == false) {
                    data[i][0] = fichas.get(i).getNumeroPrograma();
                    data[i][1] = fichas.get(i).getNumeroComplementario();
                    data[i][2] = fichas.get(i).getRutPaciente();
                    data[i][3] = fichas.get(i).getRutProfesional();
                    data[i][4] = fichas.get(i).getRutProfesionalExterno();
                }
            }
            this.tablaContenedora.setModel(new DefaultTableModel(data, columNames));
        } else if (this.modulo instanceof ProgramaMedicoJeafosale) {
            java.util.List<service.ProgramaMedicoJeafosale> fichas = listarProgramasJeafosale();
            String[] columNames = {"Número programa", "Número complementario", "Rut paciente", "Rut profesional tratante", "Rut profesional derivador"};
            int size = fichas.size();
            for (int i = 0; i < fichas.size(); i++) {
                if (fichas.get(i).isVisible()) {
                    fichas.remove(i);
                    i--;
                }
            }
            if (!fichas.isEmpty()) {
                data = new Object[fichas.size()][columNames.length];
            }
            for (int i = 0; i < fichas.size(); i++) {
                if (fichas.get(i).isVisible() == false) {
                    data[i][0] = fichas.get(i).getNumeroPrograma();
                    data[i][1] = fichas.get(i).getNumeroComplementario();
                    data[i][2] = fichas.get(i).getRutPaciente();
                    data[i][3] = fichas.get(i).getRutProfesional();
                    data[i][4] = fichas.get(i).getRutProfesionalExterno();
                }
            }
            this.tablaContenedora.setModel(new DefaultTableModel(data, columNames));
        } else if (this.modulo instanceof Derivacion) {
            java.util.List<service.Derivacion> derivaciones = listarDerivacion();
            String[] columNames = {"ID", "Rut paciente", "Nombre Paciente", "Rut profesional", "Nombre Profesional", "Fecha"};
            for (int i = 0; i < derivaciones.size(); i++) {
                if (derivaciones.get(i).isVisible()) {
                    derivaciones.remove(i);
                    i--;
                }
            }

            if (!derivaciones.isEmpty()) {
                data = new Object[derivaciones.size()][columNames.length];
            }
            for (int i = 0; i < derivaciones.size(); i++) {
                String nombrePac = derivaciones.get(i).getNombresPaciente() + " " + derivaciones.get(i).getApellidoPaternoPaciente() + " " + derivaciones.get(i).getApellidoMaternoPaciente();
                String nombreProf = derivaciones.get(i).getNombresProfesional() + " " + derivaciones.get(i).getApellidoPaternoProfesional() + " " + derivaciones.get(i).getApellidoMaternoProfesional();
                if (!derivaciones.get(i).isVisible()) {
                    data[i][0] = derivaciones.get(i).getId();
                    data[i][1] = derivaciones.get(i).getRutPaciente();
                    data[i][2] = nombrePac;
                    data[i][3] = derivaciones.get(i).getRutProfesional();
                    data[i][4] = nombreProf;
                    data[i][5] = derivaciones.get(i).getFecha();
                }
            }
            this.tablaContenedora.setModel(new DefaultTableModel(data, columNames));
            this.ocultarColumnaID();
        } else if (this.modulo instanceof PanelSiquiatra) {
            java.util.List<service.FichaSiquiatra> fichas = listarFichasSiquiatra();
            String[] columNames = {"ID", "Rut","Nombre", "Fecha de ingreso", "Diagnóstico"};
            int size = fichas.size();
            for (int i = 0; i < fichas.size(); i++) {
                if (fichas.get(i).isActivo() || !fichas.get(i).getProfesional().equals(Login.getUser().getRut())) {
                    fichas.remove(i);
                    i--;
                }
            }
            if (!fichas.isEmpty()) {
                data = new Object[fichas.size()][columNames.length];
            }
            for (int i = 0; i < fichas.size(); i++) {
                if (fichas.get(i).isActivo() == false && fichas.get(i).getProfesional().equals(Login.getUser().getRut())) {
                    data[i][0] = fichas.get(i).getId();
                    data[i][1] = fichas.get(i).getPaciente();
                    service.Paciente pro= (service.Paciente) cargarPaciente(fichas.get(i).getPaciente());
                    data[i][2] = pro.getNombres()+" "+pro.getApellidoPaterno()+" "+pro.getApellidoMaterno();
                    data[i][3] = fichas.get(i).getFechaIngreso();
                    data[i][4] = fichas.get(i).getDiagnostico();
                }
            }
            this.tablaContenedora.setModel(new DefaultTableModel(data, columNames));
            ocultarColumnaID();
        }
    }
    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton botonRestaurar;
    private javax.swing.JLabel jLabel4;
    private javax.swing.JLabel jLabel5;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JPanel jPanel5;
    private javax.swing.JPanel jPanel6;
    private javax.swing.JPanel jPanel7;
    private javax.swing.JScrollPane jScrollPane4;
    private javax.swing.JTextField jTextField1;
    private javax.swing.JTable tablaContenedora;
    // End of variables declaration//GEN-END:variables

    /**
     * @method evento que se encarga de escuchar los eventos del teclado
     */
    public void keyListenerBuscar() {
        this.jTextField1.addKeyListener(new KeyListener() {

            @Override
            public void keyTyped(KeyEvent e) {
            }

            @Override
            public void keyPressed(KeyEvent e) {
            }

            @Override
            public void keyReleased(KeyEvent e) {
                if (!jTextField1.getText().equals("")) {
                    cargarDatos();
                    actualizarTablaBusqueda(jTextField1.getText());
                } else {
                    cargarDatos();
                }
            }
        });
    }

    /**
     * @method metodo que se encarga de actualizar la tabla en relación a la busquéda
     * @param buscar parametro al cual se desea buscar
     */
    public void actualizarTablaBusqueda(String buscar) {
        DefaultTableModel temp = (DefaultTableModel) tablaContenedora.getModel();
        for (int i = 0; i < temp.getRowCount(); i++) {
            if (!contienePalabra(buscar, temp, i)) {
                temp.removeRow(i);
                i--;
            }

        }
    }

    /**
     * @method que se encarga de buscar si una palabra buscada esta dentro de una columna de la tabla
     * @param buscar
     * @param temp
     * @param fila
     * @return
     */
    public boolean contienePalabra(String buscar, DefaultTableModel temp, int fila) {
        int coincidencias = 0;
        int j = 0;
        String buscarAux = buscar.toUpperCase();
        if (temp.getColumnName(0).equals("ID")) {
            j++;
        }
        for (int i = j; i < temp.getColumnCount(); i++) {
            String frase = (String) temp.getValueAt(fila, i);
            if ((frase.toUpperCase()).contains(buscarAux)) {
                coincidencias += 1; // existe una columna que coincide con la palabra buscada
            }
        }
        if (coincidencias == 0) {
            return false; // no existen coincidencias
        } else {
            return true;
        }
    }

    private static java.util.List<service.Cita> listarCitasPapelera() {
        service.AgendaWS_Service service = new service.AgendaWS_Service();
        service.AgendaWS port = service.getAgendaWSPort();
        return port.listarCitasPapelera();
    }

    private static java.util.List<service.Usuario> listarUsuarios() {
        service.UsuarioWSService service = new service.UsuarioWSService();
        service.UsuarioWS port = service.getUsuarioWSPort();
        return port.listarUsuarios();
    }

    private static boolean modificarUsuario(service.Usuario usuario) {
        service.UsuarioWSService service = new service.UsuarioWSService();
        service.UsuarioWS port = service.getUsuarioWSPort();
        return port.modificarUsuario(usuario);
    }

    private static Object buscarCitaPorId(java.lang.Long id) {
        service.AgendaWS_Service service = new service.AgendaWS_Service();
        service.AgendaWS port = service.getAgendaWSPort();
        return port.buscarCitaPorId(id);
    }

    private static boolean modificarCita(service.Cita arg0) {
        service.AgendaWS_Service service = new service.AgendaWS_Service();
        service.AgendaWS port = service.getAgendaWSPort();
        return port.modificarCita(arg0);
    }

    private static Object cargarUsuario(java.lang.String rut) {
        service.UsuarioWSService service = new service.UsuarioWSService();
        service.UsuarioWS port = service.getUsuarioWSPort();
        return port.cargarUsuario(rut);
    }

    private static java.util.List<service.OrdenDeDerivacion> listarDerivaciones() {
        service.OrdenDeDerivacionWSService service = new service.OrdenDeDerivacionWSService();
        service.OrdenDeDerivacionWS port = service.getOrdenDeDerivacionWSPort();
        return port.listarDerivaciones();
    }

    private static boolean modificarOrdenDeDerivacion(service.OrdenDeDerivacion ordenDeDerivacion) {
        service.OrdenDeDerivacionWSService service = new service.OrdenDeDerivacionWSService();
        service.OrdenDeDerivacionWS port = service.getOrdenDeDerivacionWSPort();
        return port.modificarOrdenDeDerivacion(ordenDeDerivacion);
    }

    private static Object buscarOrdenDeDerivacion(java.lang.Long idOrden) {
        service.OrdenDeDerivacionWSService service = new service.OrdenDeDerivacionWSService();
        service.OrdenDeDerivacionWS port = service.getOrdenDeDerivacionWSPort();
        return port.buscarOrdenDeDerivacion(idOrden);
    }

    private static java.util.List<service.Paciente> listarPacientes() {
        service.PacienteWS_Service service = new service.PacienteWS_Service();
        service.PacienteWS port = service.getPacienteWSPort();
        return port.listarPacientes();
    }

    private static Object cargarPaciente(java.lang.String rut) {
        service.PacienteWS_Service service = new service.PacienteWS_Service();
        service.PacienteWS port = service.getPacienteWSPort();
        return port.cargarPaciente(rut);
    }

    private static boolean restaurarPaciente(java.lang.String rut) {
        service.PacienteWS_Service service = new service.PacienteWS_Service();
        service.PacienteWS port = service.getPacienteWSPort();
        return port.restaurarPaciente(rut);
    }

    private static boolean restaurarDerivacion(java.lang.Long id) {
        service.DerivacionWS_Service service = new service.DerivacionWS_Service();
        service.DerivacionWS port = service.getDerivacionWSPort();
        return port.restaurarDerivacion(id);
    }

    private static Long registrar(service.Usuario usuario, java.lang.String modulo, java.lang.String accion, java.lang.String valorAnterior, java.lang.String valorNuevo) {
        service.BitacoraWSService service = new service.BitacoraWSService();
        service.BitacoraWS port = service.getBitacoraWSPort();
        return port.registrar(usuario, modulo, accion, valorAnterior, valorNuevo);
    }

    private static java.util.List<service.Convenio> listarConvenios() {
        service.ConvenioWSService service = new service.ConvenioWSService();
        service.ConvenioWS port = service.getConvenioWSPort();
        return port.listarConvenios();
    }

    private static java.util.List<service.FichaClinica> listarFichasClinicas() {
        service.FichaKineWSService service = new service.FichaKineWSService();
        service.FichaKineWS port = service.getFichaKineWSPort();
        return port.listarFichasClinicas();
    }

    private static java.util.List<service.FichaPodologa> listarFichasPodologa() {
        service.FichaPodologaWSService service = new service.FichaPodologaWSService();
        service.FichaPodologaWS port = service.getFichaPodologaWSPort();
        return port.listarFichasPodo();
    }

    private static java.util.List<service.FichaSicologa> listarFichasSicologa() {
        service.FichaSicologaWSService service = new service.FichaSicologaWSService();
        service.FichaSicologaWS port = service.getFichaSicologaWSPort();
        return port.listarFichasSicologa();
    }

    private static java.util.List<service.FichaPediatra> listarFichasPediatra() {
        service.FichaPediatraWSService service = new service.FichaPediatraWSService();
        service.FichaPediatraWS port = service.getFichaPediatraWSPort();
        return port.listarFichasPediatra();
    }

    private boolean modificarFichaPodo(service.FichaPodologa ficha) {
        service.FichaPodologaWSService service = new service.FichaPodologaWSService();
        service.FichaPodologaWS port = service.getFichaPodologaWSPort();
        return port.modificarFichaPodo(ficha);
    }

    private boolean modificarFichaSico(service.FichaSicologa ficha) {
        service.FichaSicologaWSService service = new service.FichaSicologaWSService();
        service.FichaSicologaWS port = service.getFichaSicologaWSPort();
        return port.modificarFichaSico(ficha);
    }

    private service.FichaClinica buscarFicha(Long fichaKine) {
        service.FichaKineWSService service = new service.FichaKineWSService();
        service.FichaKineWS port = service.getFichaKineWSPort();

        java.util.List<service.FichaClinica> fichasKine = port.listarFichasClinicas();
        //buscar paciente por el rut
        for (int i = 0; i < fichasKine.size(); i++) {
            if (fichasKine.get(i).getId().equals(fichaKine)) {
                return fichasKine.get(i);
            }
        }
        return null;
    }

    private service.FichaPodologa buscarFichaPodo(Long fichaP) {
        service.FichaPodologaWSService service = new service.FichaPodologaWSService();
        service.FichaPodologaWS port = service.getFichaPodologaWSPort();

        java.util.List<service.FichaPodologa> fichasPodo = port.listarFichasPodo();
        //buscar paciente por el rut
        for (int i = 0; i < fichasPodo.size(); i++) {
            if (fichasPodo.get(i).getId().equals(fichaP)) {
                return fichasPodo.get(i);
            }
        }
        return null;
    }

    private service.FichaSicologa buscarFichaSico(Long fichaP) {
        service.FichaSicologaWSService service = new service.FichaSicologaWSService();
        service.FichaSicologaWS port = service.getFichaSicologaWSPort();

        java.util.List<service.FichaSicologa> fichasSico = port.listarFichasSicologa();
        //buscar paciente por el rut
        for (int i = 0; i < fichasSico.size(); i++) {
            if (fichasSico.get(i).getId().equals(fichaP)) {
                return fichasSico.get(i);
            }
        }
        return null;
    }

    private service.FichaPediatra buscarFichaPedi(Long fichaP) {
        service.FichaPediatraWSService service = new service.FichaPediatraWSService();
        service.FichaPediatraWS port = service.getFichaPediatraWSPort();

        java.util.List<service.FichaPediatra> fichasPedi = port.listarFichasPediatra();
        //buscar paciente por el rut
        for (int i = 0; i < fichasPedi.size(); i++) {
            if (fichasPedi.get(i).getId().equals(fichaP)) {
                return fichasPedi.get(i);
            }
        }
        return null;
    }

    public service.Convenio buscarConvenio(String rutConvenio) {
        service.ConvenioWSService service = new service.ConvenioWSService();
        service.ConvenioWS port = service.getConvenioWSPort();

        java.util.List<service.Convenio> convenios = port.listarConvenios();
        //buscar el convenio por el rut de la institucion o profesional
        for (int i = 0; i < convenios.size(); i++) {
            if (convenios.get(i).getRutInstitucion().equals(rutConvenio)) {
                return convenios.get(i);
            }
        }
        return null;
    }

    private static Object cargarPrivilegios(java.lang.String rut) {
        service.PrivilegiosWS_Service service = new service.PrivilegiosWS_Service();
        service.PrivilegiosWS port = service.getPrivilegiosWSPort();
        return port.cargarPrivilegios(rut);
    }

    private static boolean modificarFicha(service.FichaClinica fichaClinica) throws HeuristicMixedException_Exception, HeuristicRollbackException_Exception {
        service.FichaKineWSService service = new service.FichaKineWSService();
        service.FichaKineWS port = service.getFichaKineWSPort();
        return port.modificarFicha(fichaClinica);
    }

    private static boolean modificarFichaPedi(service.FichaPediatra fichaPediatra) {
        service.FichaPediatraWSService service = new service.FichaPediatraWSService();
        service.FichaPediatraWS port = service.getFichaPediatraWSPort();
        return port.modificarFichaPedi(fichaPediatra);
    }

    private static boolean editarFichaFarfan(service.FichaMedicoGeneral fichaFarfan) {
        service.FichaMedicoGeneralWSService service = new service.FichaMedicoGeneralWSService();
        service.FichaMedicoGeneralWS port = service.getFichaMedicoGeneralWSPort();
        return port.editarFichaFarfan(fichaFarfan);
    }

    private static Object obtenerFichaFarfan(java.lang.Long idFicha) {
        service.FichaMedicoGeneralWSService service = new service.FichaMedicoGeneralWSService();
        service.FichaMedicoGeneralWS port = service.getFichaMedicoGeneralWSPort();
        return port.obtenerFichaFarfan(idFicha);
    }

    private static java.util.List<service.FichaMedicoGeneral> listarFichasFarfan() {
        service.FichaMedicoGeneralWSService service = new service.FichaMedicoGeneralWSService();
        service.FichaMedicoGeneralWS port = service.getFichaMedicoGeneralWSPort();
        return port.listarFichasFarfan();
    }

    private static java.util.List<service.ProfesionalExterno> listarProfesionalesExternos() {
        service.ProfesionalExternoWSService service = new service.ProfesionalExternoWSService();
        service.ProfesionalExternoWS port = service.getProfesionalExternoWSPort();
        return port.listarProfesionalesExternos();
    }

    private static Object cargarProfesionalExterno(java.lang.String rut) {
        service.ProfesionalExternoWSService service = new service.ProfesionalExternoWSService();
        service.ProfesionalExternoWS port = service.getProfesionalExternoWSPort();
        return port.cargarProfesionalExterno(rut);
    }

    private static boolean modificarProfesionalExterno(service.ProfesionalExterno profesionalExterno) {
        service.ProfesionalExternoWSService service = new service.ProfesionalExternoWSService();
        service.ProfesionalExternoWS port = service.getProfesionalExternoWSPort();
        return port.modificarProfesionalExterno(profesionalExterno);
    }

    private static Object obtenerProgramaDipreca(java.lang.String numero) {
        service.ProgramaDiprecaWSService service = new service.ProgramaDiprecaWSService();
        service.ProgramaDiprecaWS port = service.getProgramaDiprecaWSPort();


        return port.obtenerProgramaDipreca(numero);


    }

    private static java.util.List<service.ProgramaDipreca> listarProgramasDipreca() {
        service.ProgramaDiprecaWSService service = new service.ProgramaDiprecaWSService();
        service.ProgramaDiprecaWS port = service.getProgramaDiprecaWSPort();


        return port.listarProgramasDipreca();


    }

    private static boolean editarProgramaDipreca(service.ProgramaDipreca programaDipreca) {
        service.ProgramaDiprecaWSService service = new service.ProgramaDiprecaWSService();
        service.ProgramaDiprecaWS port = service.getProgramaDiprecaWSPort();


        return port.editarProgramaDipreca(programaDipreca);


    }

    private static boolean editarProgramaJeafosale(service.ProgramaMedicoJeafosale programaDipreca) {
        service.ProgramaJeafosaleWSService service = new service.ProgramaJeafosaleWSService();
        service.ProgramaJeafosaleWS port = service.getProgramaJeafosaleWSPort();


        return port.editarProgramaJeafosale(programaDipreca);


    }

    private static Object obtenerProgramaJeafosale(java.lang.String numero) {
        service.ProgramaJeafosaleWSService service = new service.ProgramaJeafosaleWSService();
        service.ProgramaJeafosaleWS port = service.getProgramaJeafosaleWSPort();
        return port.obtenerProgramaJeafosale(numero);
    }

    private static java.util.List<service.ProgramaMedicoJeafosale> listarProgramasJeafosale() {
        service.ProgramaJeafosaleWSService service = new service.ProgramaJeafosaleWSService();
        service.ProgramaJeafosaleWS port = service.getProgramaJeafosaleWSPort();


        return port.listarProgramasJeafosale();

    }

    private static java.util.List<service.Derivacion> listarDerivacion() {
        service.DerivacionWS_Service service = new service.DerivacionWS_Service();
        service.DerivacionWS port = service.getDerivacionWSPort();
        return port.listarDerivacion();
    }

    private static boolean modificarConvenio(service.Convenio convenio) {
        service.ConvenioWSService service = new service.ConvenioWSService();
        service.ConvenioWS port = service.getConvenioWSPort();
        return port.eliminarConvenio(convenio);
    }

    private static Object cargarFichaSiquiatra(java.lang.Long id) {
        service.FichaSiquiatraWSService service = new service.FichaSiquiatraWSService();
        service.FichaSiquiatraWS port = service.getFichaSiquiatraWSPort();
        return port.cargarFichaSiquiatra(id);
    }

    private static java.util.List<service.FichaSiquiatra> listarFichasSiquiatra() {
        service.FichaSiquiatraWSService service = new service.FichaSiquiatraWSService();
        service.FichaSiquiatraWS port = service.getFichaSiquiatraWSPort();
        return port.listarFichasSiquiatra();
    }

    private static boolean modificarFichaSiqui(service.FichaSiquiatra fichaSiquiatra) {
        service.FichaSiquiatraWSService service = new service.FichaSiquiatraWSService();
        service.FichaSiquiatraWS port = service.getFichaSiquiatraWSPort();
        return port.modificarFichaSiqui(fichaSiquiatra);
    }

    private static Object cargarDerivacion(java.lang.Long id) {
        service.DerivacionWS_Service service = new service.DerivacionWS_Service();
        service.DerivacionWS port = service.getDerivacionWSPort();
        return port.cargarDerivacion(id);
    }

    private static java.util.List<service.Cita> listarCitasPapeleraParaProfesional(java.lang.String rut) {
        service.AgendaWS_Service service = new service.AgendaWS_Service();
        service.AgendaWS port = service.getAgendaWSPort();
        return port.listarCitasPapeleraParaProfesional(rut);
    }
}
